草庐IT

C++ 对和指针

全部标签

c++ - 对引用和指针的混淆

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhatarethedifferencesbetweenpointervariableandreferencevariableinC++?Whatarethedistinctionsbetweenthevarioussymbols(*,&,etc)combinedwithparameters?我在理解下面粘贴的示例代码时遇到了一些麻烦。具体来说,函数Buf&operator=(constBuf&);。据我了解,此函数需要返回类Buf的对象的地址。出现两个问题:将其声明为Buf*operator=(constB

c++ - C++通过基类指针访问派生类成员

有没有办法让通用代码通过基类指针访问派生类的成员?或者还有其他解决方法吗?假设我有一个Shape类。我有继承它的Square和Triangle类。两者都有自己的私有(private)成员,彼此无关,因此将它们放在基类中毫无意义。现在,如果我需要将类写入文件,但直到我需要将类写入文件时才知道该类是方形还是三角形怎么办?我一直在想办法解决这个问题。最坏的解决方案是将Square和Triangle的数据写入一个文件,为读取和写入添加一个标识符(Triangle或Square),并在加载数据时让一个小型解析器将类放在一起。这将是低效和浪费时间的。我想知道是否有一些技巧或设计模式或任何可以帮助解

C++ 如何将 'this' 传递给指针引用

我有一个主类,我想将它的指针引用传递给我创建的一个对象,但它给我错误:Error1errorC2664:'GameController::GameController(GameLayer*&)':cannotconvertparameter1from'GameLayer*const'to'GameLayer*&'我在GameLayer(主要对象)中有什么m_pGameController=newGameController(this);在GameController中我有这个构造函数GameController(GameLayer*&GameLayer){setGameLayer(ga

c++ - 为什么在取消引用的函数指针上使用时 std::is_function 的计算结果为 false?

我正在尝试使用std::is_function来确定变量是否为函数指针。运行以下代码时#include#includeusingnamespacestd;intmain(){typedefint(*functionpointer)();functionpointerpmain=main;cout::value::value::value::value输出是PFivE0PFivE0FivE1FivE0任何有见识的人都可以解释为什么std::is_function的最后一个表达式的计算结果为false吗?(代码在g++4.7、g++4.8和clang++3.2下测试)

c++ - C++中的指针有什么用?

我在理解这个程序中指针的使用时遇到了一些困难:#includeclassABC{public:intdata;voidgetdata(){cout>data;coutgetdata();}我得到了以下步骤之前的所有内容:ABC*q;那有什么作用?我的书说它是一个类类型的指针(它非常含糊不清,语法可悲)。但是,这是什么意思?指向ABC类地址的指针?如果是,那么下一步会让我感到困惑。q=&obj.data;所以我们将这个指针指向data的位置,这是一个变量。那ABC*q;如何适应呢?最后一步。q->getdata();有什么作用?我的书说它是一个“指向成员函数运算符的指针”,但没有给出任何

c++ - 共享指针双重删除

我有一个对象,尽管它被智能指针跟踪,但显然被双重删除了。我不熟悉使用智能指针,所以我创建了一个简单的函数来测试我是否正确使用了该对象。int*a=newint(2);std::shared_ptrb(a);std::shared_ptrc(a);当指针超出范围时,主函数中的这组代码会导致运行时错误,为什么?智能指针不是应该能够自己处理a的删除吗? 最佳答案 shared_ptr期望拥有指向的对象。您所做的是创建两个独立的智能指针,每个智能指针都认为它拥有底层int的独占所有权。他们不知道彼此的存在,他们不互相交谈。因此,当它们超出范

c++ - 如何在 C++ 运行时声明 n 阶指针

指针可以这样声明:inta=1,*b=&a,//1storderpointer**c=&b,//2ndorderpointer***d=&c,//3rdorderpointer****e=&d,//4thorderpointer*****f=&e,//5thorderpointer***n-stars***f;//n-thorderpointer在这里,我们需要在编译时知道指针在声明时的顺序。是否有可能声明一个指针,其顺序仅在运行时才知道?与这个问题相关的是,是否可以在运行时查询任意指针的顺序?intorder=GET_ORDER_OF_PTR(f)//returns5int/*ins

C++ 如何使 template<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr

我需要完成以下任务:templatef(){:return{-1ifTisofintegraltype,elsenullptr}}在我的特定用例中,T可以是四种类型之一:intPy_ssize_t//ssize_tPy_hash_t//ssize_tPyObject*//PyObjectissomeCstruct这是我迄今为止最好的解决方案:templateTtest(typenameenable_if::value,void*>::type=nullptr){return-1;}templateTtest(typenameenable_if::value,void*>::type=n

c++ - 为什么打印语句会改变指针的值?

我写了一个这样的c++代码:#includeusingnamespacestd;intmain(){inti=2;inti2=0;void*pi=&i-1;cout输出是:bycout-thevalueof*piis:0byprintf-thevalueof*piis:0theaddressofpiis:0029fe94theaddressofi2is:0029fe94thevalueofi2is:0现在,如果我删除将打印地址的语句。#includeusingnamespacestd;intmain(){inti=2;inti2=0;void*pi=&i-1;cout现在的输出是:by

c++ - 指向 char 的指针与指向数组的指针

在我决定复习一些所谓的简单示例之前,我认为我对指针有一定的了解。我知道的一件事是,在声明数组时说:intarr[2]{3,5};arr将保存数组中第一个元素的值,因此尝试打印(cout)显然给出了arr[0]的地址.即使我的程序使用指针它仍然相似。我的问题是为什么我可以打印h并且有bonjour作为输出,但我不能对p做同样的事情?当我增加h++时它看起来也像然后再次打印我得到onjour.指针与char有何不同??#include#includeintmain(){char*h="bonjour";intk[4]{3,4,5,6};int*p=k;std::cout